package com.wb.core2;

/**
 * @author 黄衡熙
 * @version 1.0
 * @date 2025年07月15日11:11
 */
public class Test4 {
    public static void main(String[] args) {
        int num1 = 5, num2 = 8;
        // 00000000 00000000 00000000 00000101
        // 00000000 00000000 00000000 00001000
        // 00000000 00000000 00000000 00000000
        System.out.println(num1 & num2);
        // 00000000 00000000 00000000 00000101
        // 00000000 00000000 00000000 00001000
        // 00000000 00000000 00000000 00001101
        // 1+4+8=13
        System.out.println(num1 | num2);
        // 00000000 00000000 00000000 00000101
        // 11111111 11111111 11111111 11111010 补码
        // 反码:11111111 11111111 11111111 11111001
        // 原码:10000000 00000000 00000000 00000110=-6
        System.out.println(~num1);
        // 00000000 00000000 00000000 00001000
        // 11111111 11111111 11111111 11110111
        // 反码:11111111 11111111 11111111 11110110
        // 原码:10000000 00000000 00000000 00001001=-9
        System.out.println(~num2);
        // 00000000 00000000 00000000 00000101
        // 00000000 00000000 00000000 00001000
        // 00000000 00000000 00000000 00001101=13
        System.out.println(num1 ^ num2);
        // 00000000 00000000 00000000 00000101
        // 左移2位后:00 00000000 00000000 00000000 00010100
        // 00000000 00000000 00000000 00010100=4+16=20
        System.out.println(num1 << 2);
        // 00000000 00000000 00000000 00001000
        // 左移2位后:00 00000000 00000000 00000000 001000
        // 00000000 00000000 00000000 00100000=32
        System.out.println(8 << 2);

        // 00000000 00000000 00000000 00000101
        // 右移两位后:000000 00000000 00000000 00000001 01
        // 00000000 00000000 00000000 00000001=1
        System.out.println(num1 >> 2);
        // 10000000 00000000 00000000 00000101
        // 反码:11111111 11111111 11111111 11111010
        // 补码:11111111 11111111 11111111 11111011
        // 右移2位:111111 11111111 11111111 11111110 11
        // 11111111 11111111 11111111 11111110
        // 反码:11111111 11111111 11111111 11111101
        // 原码:10000000 00000000 00000000 00000010=-2
        System.out.println(-5 >> 2);

        // 10000000 00000000 00000000 00001000
        // 反码:11111111 11111111 11111111 11110111
        // 补码:11111111 11111111 11111111 11111000
        // 右移2位:111111 11111111 11111111 11111110 00
        // 11111111 11111111 11111111 11111110
        // 反码:11111111 11111111 11111111 11111101
        // 原码:10000000 00000000 00000000 00000010=-2
        System.out.println(-8 >> 2);

        // 10000000 00000000 00000000 00001000
        // 反码:11111111 11111111 11111111 11110111
        // 补码:11111111 11111111 11111111 11111000
        // 右移2位:111111 11111111 11111111 11111110 00
        // 00111111 11111111 11111111 11111110
        System.out.println(-8 >>> 2);
    }
}
